#pragma once

#include <windows.h>

// The following macros define the minimum required platform.  The minimum required platform
// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 
// your application.  The macros work by enabling all features available on platform versions up to and 
// including the version specified.

#define FGE_COMPILER_MSVC 1
#define FGE_COMPILER_GNUC 2

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER                  // Specifies that the minimum required platform is Windows Vista.
#define WINVER 0x0600           // Change this to the appropriate value to target other versions of Windows.
#endif

#ifndef _WIN32_WINNT            // Specifies that the minimum required platform is Windows Vista.
#define _WIN32_WINNT 0x0600     // Change this to the appropriate value to target other versions of Windows.
#endif

#ifndef _WIN32_WINDOWS          // Specifies that the minimum required platform is Windows 98.
#define _WIN32_WINDOWS 0x0410	// Change this to the appropriate value to target Windows Me or later.
#endif

#ifndef _WIN32_IE				// Specifies that the minimum required platform is Internet Explorer 7.0.
#define _WIN32_IE 0x0700        // Change this to the appropriate value to target other versions of IE.
#endif


#ifndef FGE_DOUBLE_PRECISION
#define FGE_DOUBLE_PRECISION 1
#endif

#ifdef _LIB
#define FGE_STATIC_LIB 1
#endif 

#ifdef UNICODE
#define FGE_WCHAR_T_STRINGS 1
#else 
#define FGE_WCHAR_T_STRINGS 0
#endif 

#if defined( _MSC_VER )
#   define FGE_COMPILER FGE_COMPILER_MSVC
#   define FGE_COMP_VER _MSC_VER
#elif defined( __GNUC__ )
#   define FGE_COMPILER FGE_COMPILER_GNUC
#   define FGE_COMP_VER (((__GNUC__)*100) + \
        (__GNUC_MINOR__*10) + \
        __GNUC_PATCHLEVEL__)
#elif defined( __BORLANDC__ )
#   define FGE_COMPILER FGE_COMPILER_BORL
#   define FGE_COMP_VER __BCPLUSPLUS__
#   define __FUNCTION__ __FUNC__ 
#else
#   pragma error "No known compiler. Abort! Abort!"
#endif

// If we're not including this from a client build, specify that the stuff
// should get exported. Otherwise, import it.
#	if defined( FGE_STATIC_LIB )
// Linux compilers don't have symbol import/export directives.
#   	define _fgeExport
#   	define _fgePrivate
#   else
#   	if defined( FGE_NONCLIENT_BUILD )
#       	define _fgeExport __declspec( dllexport )
#   	else
#           if defined( __MINGW32__ )
#               define _fgeExport
#           else
#       	    define _fgeExport __declspec( dllimport )
#           endif
#   	endif
#   	define _fgePrivate
#	endif
// Win32 compilers use _DEBUG for specifying debug builds.
#   ifdef _DEBUG
#       define FGE_DEBUG_MODE 1
#   else
#       define FGE_DEBUG_MODE 0
#   endif
